﻿using Dao;
using Interface.BO;
using Interface.DAO;
using JMI_Nucleo.JMIProvider;
using OR;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BO
{
    public class Perfil : IPerfil
    {
        private string msgErro;
        IPerfilDao<mPerfil> dao;
         
        public Perfil()
        {
            dao = DaoFactory<PerfilDao>.Create();
        }

        public string MsgErro { get { return msgErro; } }

        private bool Valida(mPerfil _mPerfil)
        {
            bool sucesso = true;

            if (String.IsNullOrEmpty(_mPerfil.Descricao))
            {
                msgErro = "Descrição, Campo Obrigatório.";
                sucesso = false;
            }
            else if (_mPerfil.Descricao.Length > 45)
            {
                msgErro = "Descrição, Campo deve possuir no máximo 45 caractr(es).";
                sucesso = false;
            }
            return sucesso;
        }

        public bool Salvar(mPerfil infoPerfil, char Acao, int Codigo, short Empresa)
        {
            bool retorno = false;
            DbTransaction trans;
            try
            {
                EngineBD.Conectar();
                if (Valida(infoPerfil))
                {                    
                    trans = EngineBD.IniciaTransacao();

                    if (Acao == 'I')
                        retorno = dao.Inserir(infoPerfil);
                    else if (Acao == 'A')
                        retorno = dao.Alterar(infoPerfil);

                    EngineBD.FinalizaTransacao(trans, retorno);
                }
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return retorno;
        }
        public bool Excluir(int Codigo, short Empresa)
        {
            bool retorno = false;
            DbTransaction trans;
            try
            {
                EngineBD.Conectar();
                trans = EngineBD.IniciaTransacao();
                mPerfil info = new mPerfil();
                info.Codigo = Codigo;
                info.CodigoEmpresa = Empresa;

                retorno = dao.Excluir(info);
                EngineBD.FinalizaTransacao(trans, retorno);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return retorno;
        }
        public mPerfil GetPerfil(int Codigo, short Empresa)
        {
            mPerfil _mPerfil;

            try
            {
                EngineBD.Conectar();
                _mPerfil = dao.GetPerfil(Codigo, Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return _mPerfil;
        }
        public List<mPerfil> GetLista(short Empresa)
        {
            List<mPerfil> lst = null;

            try
            {
                EngineBD.Conectar();
                lst = dao.GetLista(Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return lst;
        }        
    }
}
